home *** CD-ROM | disk | FTP | other *** search
/ Gigantic Games 2 / Gigantic Games 2.iso / pc / _m_ / madgic / points.c < prev    next >
C/C++ Source or Header  |  1994-12-23  |  3KB  |  152 lines

  1. /*
  2.  * Points.c
  3.  * by Scott Maxwell 18 March 92
  4.  *
  5.  * Takes a MADgic Core 4.0 tournament results file and translates it into
  6.  *  a points-based system, where a win is worth 3 points, a tie is 1
  7.  *  point, and a loss is of course 0 points. Any of those settings can
  8.  *  be overridden by command-line arguments.
  9.  *
  10.  * I compiled it with:
  11.  *  lc -cafis -d0 -mas -v -Lmv -E -O points
  12.  */
  13.  
  14. /*
  15. #include <types.h>
  16. */
  17. #define VOID void
  18. #define BOOL int
  19.  
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <string.h>
  23.  
  24. #define BUFFER_SIZE        1024
  25.  
  26.  
  27. /**********************
  28.  *                    *
  29.  *  Global variables  *
  30.  *                    *
  31.  **********************/
  32.  
  33. FILE        *Ifp;                                    /* Input-file pointer  */
  34.  
  35.  
  36.  
  37. /*************************
  38.  *                       *
  39.  *  Function prototypes  *
  40.  *                       *
  41.  *************************/
  42.  
  43. VOID process_file(double, double, double);
  44. VOID clean_string(char *);
  45. VOID main(int, char *[]);
  46.  
  47.  
  48. /************************
  49.  *                      *
  50.  *  Start of functions  *
  51.  *                      *
  52.  ************************/
  53.  
  54.  
  55. /*
  56.  * Clean everything out of a string except spaces and digits.
  57.  */
  58. VOID clean_string(char *clean_me)
  59. {
  60.     char new_string[BUFFER_SIZE], *ps, *pd;
  61.  
  62.     ps = clean_me;
  63.     pd = new_string;
  64.  
  65.     while(*ps != '\0')
  66.     {
  67.         if ( (*ps == ' ') || ( (*ps >= '0') && (*ps <= '9') ) )
  68.         {
  69.             *pd = *ps;
  70.             pd++;
  71.         }
  72.         ps++;
  73.     }
  74.  
  75.     *pd = '\0';
  76.  
  77.     strcpy(clean_me, new_string);
  78. }
  79.  
  80.  
  81.  
  82.  
  83. /*
  84.  * Process the input file, removing stuff with clean_string().
  85.  */
  86. VOID process_file(double wf, double tf, double lf)
  87. {
  88.     int i, wins, losses, ties;
  89.     char buffer[BUFFER_SIZE];    /* Input buffer  */
  90.  
  91.     /* Preserve the banner */
  92.     for (i = 0; i < 4; i++)
  93.         if (fgets(buffer, BUFFER_SIZE, Ifp) != NULL) printf("%s", buffer);
  94.  
  95.     /* Loop 'til EOF. */    
  96.     while(fgets(buffer, BUFFER_SIZE, Ifp) != NULL)                /* Blank line */
  97.     {
  98.         if (fgets(buffer, BUFFER_SIZE, Ifp) == NULL) break;   /* Filename */
  99.  
  100.         if (buffer[0] != '\0') /* Should never fail, but still ... */
  101.             buffer[strlen(buffer) - 1] = '\0';
  102.         printf("%30s", buffer);                                         /* Filename */
  103.  
  104.         if (fgets(buffer, BUFFER_SIZE, Ifp) == NULL) break;    /* Results line */
  105.  
  106.         clean_string(buffer);
  107.  
  108.         sscanf(buffer, "%d %d %d", &wins, &losses, &ties);
  109.         printf("    Points: %#6.2f\n", wf * wins + lf * losses + tf * ties);
  110.     }
  111.  
  112.     puts("");
  113. }
  114.  
  115. VOID main(int argc, char *argv[])
  116. {
  117.     double wf = 3.0, tf = 1.0, lf = 0.0;
  118.  
  119.     /* If user wants help, we'll give him help */
  120.     if ( (argc < 2) || (argc > 5) || (argv[1][0] == '?') )
  121.     {
  122.         puts("\nPoints -- A freely redistributable program by Scott Maxwell   (C) 1992\n");
  123.         puts("Assigns points based on MADgic Core 4.0 tournament manager output");
  124.         printf("Usage: %s [>outfile] infile [win-factor [tie-factor [loss-factor]]]\n", argv[0]);
  125.         puts("Defaults: win-factor = 3.0; tie-factor = 1.0; loss-factor = 0.0\n");
  126.         exit(0);
  127.     }
  128.  
  129.     /* (Else) invoked with filename */
  130.  
  131.     if ( (Ifp = fopen(argv[1], "r")) == NULL )
  132.     {
  133.         printf("Couldn't open file `%s' for reading.\n", argv[1]);
  134.         exit(10);
  135.     }
  136.  
  137.     if (argc > 2)
  138.     {
  139.         sscanf(argv[2], "%lf", &wf);
  140.         if (argc > 3)
  141.         {
  142.             sscanf(argv[3], "%lf", &tf);
  143.             if (argc > 4) sscanf(argv[4], "%lf", &lf);
  144.         }
  145.     }
  146.  
  147.     process_file(wf, tf, lf);
  148.  
  149.     if (fclose(Ifp) == EOF)
  150.         puts("WARNING: inexplicable error closing input file ....");
  151. }
  152.